//
// Created by REEJI2219 on 2024-09-29.
//
#include <iostream>

using namespace std;
typedef int ElemType;

class StaticArrayList {
public:
    ElemType *data;
    int max;
    int length;

    StaticArrayList() {
        data = new ElemType[max];
        max = 100;
        length = 0;
    }

    ~StaticArrayList() {
        delete[] data;
    }

    /**
    * 插入元素
    * @param i 位次
    * @param ele 要插入元素
    * @return
    */
    bool listInsert(int i, int ele) {
        if (i < 0 || i > length + 1 || length >= max) {
            return false;
        }
        //i后面的后移
        for (int key = length; key >= i; key--) {
            data[key] = data[key - 1];
        }
        data[i - 1] = ele;
        length++;
        return true;
    }

    /**
     * 删除元素
     * @param i 当前位次
     * @param ele 当前位次数据
     * @return 是否删除成功
     */
    bool listDelete(int i, int &ele) {
        if (i < 0 || i > length + 1) {
            return false;
        }
        ele = data[i - 1];
        for (int key = i - 1; key < length; key++) {
            data[key] = data[key + 1];
        }
        length--;
        return true;
    }

    /**
     * 获取第i个元素
     * @param i 第一个位次，位次从1开始
     * @param result 返回结构
     * @return 状态
     */
    bool getElement(int i, int &result) {
        if (i > 0 || i > length) {
            return false;
        }
        return data[i - 1];
    }

    /**
     * 第一个相等元素的位次
     * @param data 返回数据的位次
     * @return 第一个位次
     */
    int localElement(int ele) {
        for (int i = 0; i < length; i++) {
            if (data[i] == ele) {
                return i + 1;
            }
        }
        return -1;
    }
};
